#include "exp.h"


static znx_bool_t
znx_exp_core_conf_parse(
    void *conf, znx_pool_t *pool, yaml_document_t *doc,
    yaml_node_t *root, znx_str_t *err);

static znx_bool_t znx_exp_core_conf_post();
static znx_bool_t znx_exp_core_main_init();
static znx_bool_t znx_exp_core_worker_init();
static znx_bool_t znx_exp_core_worker_proc_exit();
static znx_bool_t znx_exp_core_worker_exit();
static znx_bool_t znx_exp_core_main_exit();


znx_core_module_t       exp_core_module = {
    0,
    ZNX_STRING("exp_core_module"),
    znx_exp_core_conf_parse,
    znx_exp_core_conf_post,
    znx_exp_core_main_init,
    znx_exp_core_worker_init,
    znx_exp_core_worker_proc_exit,
    znx_exp_core_worker_exit,
    znx_exp_core_main_exit
};


static znx_command_t    exp_commands[] = {
    {
        ZNX_STRING("e1"),
        znx_command_set_int64,
        offsetof(znx_exp_module_conf_t, e1)
    },

    {
        ZNX_STRING("e2"),
        znx_command_set_string,
        offsetof(znx_exp_module_conf_t, e2)
    },

    {
        ZNX_STRING("e3"),
        znx_command_set_bool,
        offsetof(znx_exp_module_conf_t, e3)
    },

    znx_null_command
};


static znx_bool_t
znx_exp_core_conf_parse(
    void *conf, znx_pool_t *pool, yaml_document_t *doc,
    yaml_node_t *root, znx_str_t *err)
{
    znx_exp_module_conf_t   *exp_conf;
    exp_conf = znx_pool_calloc(pool, sizeof(znx_exp_module_conf_t));
    exp_conf->e1 = ZNX_INT64_UNSET;
    exp_conf->e3 = ZNX_BOOL_UNSET;

    if (!znx_yaml_map_node_parser(exp_conf,
        pool, doc, root, exp_commands, err))
    {
        return ZNX_FALSE;
    }

    znx_core_set_module_conf(exp_core_module, exp_conf);

    return ZNX_TRUE;
}


static znx_bool_t
znx_exp_core_conf_post()
{
    ZNX_DEF_LOG_DEBUG(NULL, "znx_exp_core_conf_post");
    return ZNX_TRUE;
}

static znx_bool_t
znx_exp_core_main_init()
{
    ZNX_DEF_LOG_DEBUG(NULL, "znx_exp_core_main_init");
    return ZNX_TRUE;
}

static znx_bool_t
znx_exp_core_worker_init()
{
    ZNX_DEF_LOG_DEBUG(NULL, "znx_exp_core_worker_init");
    return ZNX_TRUE;
}

static znx_bool_t
znx_exp_core_worker_proc_exit()
{
    ZNX_DEF_LOG_DEBUG(NULL, "znx_exp_core_worker_proc_exit");
    return ZNX_TRUE;
}

static znx_bool_t
znx_exp_core_worker_exit()
{
    ZNX_DEF_LOG_DEBUG(NULL, "znx_exp_core_worker_exit");
    return ZNX_TRUE;
}

static znx_bool_t
znx_exp_core_main_exit()
{
    ZNX_DEF_LOG_DEBUG(NULL, "znx_exp_core_main_exit");
    return ZNX_TRUE;
}